package com.recruit.wechat.utils;

import com.aspose.words.Document;
import com.aspose.words.SaveFormat;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.tomcat.jni.Directory;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

/**
 * 上传文件  文件服务器工具类
 *
 *     刘飞
 *
 */
public class FtpToPDFUtil {

    //文件服务器地址
    private static final String FTP_ADDRESS="118.24.214.229";
    //端口号
    private static final int FTP_PORT=21;
    //用户名
    private static final String FTP__USERNAME="user-file";
    //密码
    private static final String  FTP_PASSWORD="123456";
    //附带路径
    private static final String FTP_BASEPATH="/home/user-file/index/LF";
    //定义上传保存转换后的可访问路径
    private static String pdfurl;

    /**
     * 上传文件
     * @param file 上传文件
     */
    public static String uploadFile(MultipartFile file) throws IOException {
        //获取上传文件流
        InputStream inputStream = file.getInputStream();

        //获取上传文件名字
        String filename = file.getOriginalFilename();

        //截取后缀
        String suffix = filename.substring(filename.lastIndexOf("."));

        //使用UUID 拼接后缀，定义一个不重复的文件名
        String  finaName = UUID.randomUUID() + suffix;

        FTPClient ftp=new FTPClient();
        try{
            int reply;
            ftp.connect(FTP_ADDRESS,FTP_PORT);//链接FTP服务器
            ftp.login(FTP__USERNAME,FTP_PASSWORD);//登录
            reply=ftp.getReplyCode();//
            //判断是否链接的上  没链接上返回true
            if(!FTPReply.isPositiveCompletion(reply)){
                //断开链接
                ftp.disconnect();
                //返回falese
                return null;
            }
            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);// 文件类型 二进制的文件
            ftp.makeDirectory(FTP_BASEPATH); //创建文件夹
            ftp.changeWorkingDirectory(FTP_BASEPATH);//改变目录
            ftp.enterLocalPassiveMode();
            ftp.storeFile(finaName,inputStream);

            System.out.println("服务器保存文件成功，文件类型"+suffix);

            //如果上传的文件是pdf则直接保存返回路径
            if (suffix.equals(".pdf")){
                pdfurl = "http://"+FTP_ADDRESS+"/files/LF/"+finaName;
                System.out.println("PDF文件保存后可访问路径=======================" + pdfurl);
            }else {
                //本地文件暂存完成后转换
                pdfurl = returnPDFurl(finaName);
                System.out.println("文件转换完成退出返回文件地址=======================" + pdfurl);
            }

            inputStream.close();
            ftp.logout(); //登录注销

        }catch (IOException e){
            e.printStackTrace();
            return null;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            if(ftp.isConnected()){
                try {
                    //断开链接
                    ftp.disconnect();
                } catch (IOException e) {
                    e.printStackTrace();
                    return null;
                }
            }

        }

    return pdfurl;
    }

    /**
     * 返回服务器文件全路径
     * @param finaName 上传成功后返回的文件名
     * @auth   LF
     * @date   2020-08-26
     */
    public static String  ReturnUrl(String finaName){
       /* if (finaName.length()<1){
            return null;
        }
        return "http://"+FTP_ADDRESS+"/files/LF/"+finaName+".pdf";*/
        return (finaName.length()<1) ? null : "http://"+FTP_ADDRESS+"/files/LF/"+finaName+".pdf";
    }


    /**
     * word文件转PDF 返回服务器pdf文件访问路径
     * @param finaName 文件名
     * @auth   LF
     * @date   2020-08-27
     */
    public static  String returnPDFurl(String finaName){
        //截取后缀
        String suffix = finaName.substring(0,finaName.lastIndexOf("."));
        //PDF路径
        String pdfurl = FTP_BASEPATH+"/"+suffix+".pdf";
        //doc路径
        String docUrl = FTP_BASEPATH+"/"+finaName;

        try {
            // 加载全部数据到内容中.
            Document document = new Document(docUrl);
            //Document document = new Document("http://"+FTP_ADDRESS+"/files/LF/"+finaName);

            //pdf路径
            File outputFile = new File(pdfurl);
            //System.out.println(outputFile.getPath()+"===outputFile.getPath()");
            //操作文档保存
            document.save(outputFile.getAbsolutePath(), SaveFormat.PDF);

            //PDF转换完成后删除本地doc文件
            File delFile = new File(docUrl);
            delFile.delete();

        }catch (Exception e) {
                e.printStackTrace();
                return ReturnUrl(null);
            }

        return ReturnUrl(suffix);
    }

    /**
     * 验证上传文件类型是否符合要求
     * @param file 待上传文件
     */
    public static Boolean ValidFileType(MultipartFile file){

        //获取上传文件名字
        String filename = file.getOriginalFilename();
        //截取后缀
        String suffix = filename.substring(filename.lastIndexOf("."));
        Boolean flg;
        switch (suffix){
            case ".doc":
                flg = true;
                break;
            case ".docx":
                flg = true;
                break;
            case ".pdf":
                flg = true;
                break;
            default:
                flg = false;
        }
        return flg;
    }


}
